package org.example.dbcompare.model.result;

import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;

import java.util.List;
import java.util.Map;

/**
 * 数据对比结果
 * @author wuyong
 * @date 2025/10/22
 */
@Data
@Builder
@NoArgsConstructor
@AllArgsConstructor
public class CompareDataItem {
    /**
     * 表名
     */
    private String tableName;
    
    /**
     * 数据是否完全相等
     */
    private boolean isEqual;
    
    /**
     * 源数据库记录数
     */
    private long sourceRecordCount;
    
    /**
     * 目标数据库记录数
     */
    private long targetRecordCount;
    
    /**
     * 数据不匹配的行数
     */
    private long mismatchRowCount;
    private List<Map<String,Object>> mismatchRows;
    /**
     * 数据不匹配的详细信息
     * Key: 行号, Value: 不匹配的列信息
     */
    private Map<String, List<ColumnDataMismatch>> mismatchDetails;
    
    /**
     * 错误信息（如果对比过程中发生错误）
     */
    private String errorMessage;
    
    /**
     * 对比开始时间
     */
    private long startTime;
    
    /**
     * 对比结束时间
     */
    private long endTime;
    
    /**
     * 对比耗时（毫秒）
     */
    public long getDuration() {
        return endTime - startTime;
    }
    
    /**
     * 列数据不匹配信息
     */
    @Data
    @Builder
    @NoArgsConstructor
    @AllArgsConstructor
    public static class ColumnDataMismatch {
        /**
         * 列名
         */
        private String columnName;
        
        /**
         * 源数据库的值
         */
        private Object sourceValue;
        
        /**
         * 目标数据库的值
         */
        private Object targetValue;
        
        /**
         * 不匹配原因
         */
        private String mismatchReason;
    }
}
